package co.edu.uniquindio.ondas.daos;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import co.edu.uniquindio.ondas.dtos.ResumenComentarioDTO;
import co.edu.uniquindio.ondas.entidades.Comentario;
/**
 * @version 1.0
 * @author Javier
 * 
 * Session Bean implementation class Bitacora5DAO
 * 
 * @param Bitacora5DAOhace referencia a la entidad que va hacer manejada por el DAO.
 * @param Long especifica cual es el tipo de dato de la llave primaria de la entidad. 
 */
public class ComentarioDAO extends DAO<Comentario, Long>{

	/**
	 * Manjedor de Persistencia
	 */
	private EntityManager entityManager;
	/**
	 * Metodo constructor 
	 *@param entityManager
	 */
	public ComentarioDAO(EntityManager entityManager) {
		super(entityManager);
		this.entityManager=entityManager;
	}

	@Override
	protected Class<Comentario> getEntityClass() {
		// TODO Auto-generated method stub
		return Comentario.class;
	}
	
	/**
	 * Metodo que permite consultar y obtener una lista de los comentarios hechos a una investigacion dado la identificacion de la investigacion
	 * @param idInvestigacion
	 * @return Lista de comentarios hechos a una Investigacion
	 */
	@SuppressWarnings("unchecked")
	public List<Comentario> obtenerComentariosInvestigacion(long idInvestigacion)
	{
		Query query=entityManager.createQuery("SELECT c FROM Comentario c WHERE c.investigacion.identificacion=:parametro");
		query.setParameter("parametro", idInvestigacion);
		return query.getResultList();
	}
	
	/**
	 * Metodo que permite consultar y obtener una resumen de los comentarios hechos a una Investigacion dado el Identificador de la Investigacion y la linea Tematica
	 * @param idInvestigacion
	 * @param linea
	 * @return Lista de Resumen de comentarios de la Investigacion
	 */
	@SuppressWarnings("unchecked")
	public List<ResumenComentarioDTO>obtenerResumenComentarios(long idInvestigacion, String linea)
	{
		Query query=entityManager.createQuery("SELECT new co.edu.uniquindio.ondas.dtos.ResumenComentarioDTO(c.identificacion, c.investigacion.identificacion, c.comentario, c.investigacion.grupo.nombre, c.investigacion.nombre) FROM Comentario c WHERE c.investigacion.identificacion <>:parametro AND c.investigacion.lineaTematica.linea =:parametro2");
		query.setParameter("parametro", idInvestigacion);
		query.setParameter("parametro2", linea);
		return query.getResultList();
	}

}
